package com.yidu.action;

import java.io.IOException;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import org.springframework.http.HttpRequest;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.multipart.MultipartFile;

import com.yidu.action.vo.ZTree;
import com.yidu.comment.Message;
import com.yidu.comment.Page;
import com.yidu.comment.Tools;
import com.yidu.model.SnFinance;
import com.yidu.model.SnRole;
import com.yidu.model.SnUser;
import com.yidu.service.SnMoRoleService;
import com.yidu.service.SnRoleService;
import com.yidu.service.SnUserService;

/**
 * 
 * 描述:角色Action类
 * @author 陈旭
 * @date 2018年11月30日
 */
@Controller
@RequestMapping("/role")
public class SnRoleAction {
	
	/**
	 * 注入角色Service
	 */
	@Resource
	private SnRoleService roleService;
	
	/**
	 * 注入角色模块Service
	 */
	@Resource
	private SnMoRoleService snMoRoleService;
	
	/**
	 * 注入用户表的service
	 */
	@Resource
	private SnUserService snUserService;
	
	/**
	 * 查询所有角色数据
	 * @param page		当前页数
	 * @param limit		每页多少行
	 * @param role		角色Bean对象
	 * @return	map集合
	 */
	@RequestMapping("queryAll")
	@ResponseBody
	public Map<String, Object> queryAll(String page,String limit,SnRole role){
		//创建一个Page对象
		Page pages=new Page();
		//给当前页数赋值
		pages.setCurPage(Integer.valueOf(page));
		//给行数赋值
		pages.setRows(Integer.valueOf(limit));
		
		//创建一个map对象
		Map<String, Object> maps=new HashMap<>();
		//将page对象加入到map集合
		maps.put("page", pages);
		//将模块对象加入到map集合
		maps.put("role", role);
		//调用queryAll的方法
		List<SnRole> list=roleService.queryAll(maps);
		//调用findCount的方法
		int count = roleService.findCount(maps);
		//创建一个map
		Map<String, Object> map = new HashMap<>();
		//code
		map.put("code", 0);
		//msg
		map.put("msg", 0);
		//count
		map.put("count", count);
		//将list赋值给data中
		map.put("data", list);
		//返回一个map集合
		return map;
	}
	/**
	 * 模块名称树节点
	 * @return
	 */
	@RequestMapping("queryList")
	@ResponseBody
	public List<ZTree> queryList(){
		//调用服务类queryTree方法
		List<ZTree> list = roleService.queryTree();
		//循环参数list
		for (ZTree treeNode : list) {
			//调用服务类queryTreeNode方法
			List<ZTree> list2 = roleService.queryTreeNode(treeNode.getValue());
			//给treeNode对象Children赋值
			treeNode.setData(list2);
		}
		//返回list
		return list;
	}
	
	/**
	 * 增加或者修改
	 * @param snRole	角色对象
	 * @param id		模块Id
	 * @return	行数
	 */
	@RequestMapping("addOrUpdate")
	@ResponseBody
	public int addOrUpdate(SnRole snRole,String id){
		//调用增加或修改的方法
		return roleService.addOrUpdate(snRole, id);
	}
	
	/**
	 * 修改上屏
	 * @param roId	角色ID
	 * @return	角色对象
	 */
	@RequestMapping("findById")
	@ResponseBody
	public SnRole findById(String roId){
		//调用根据Id查询的方法
		return roleService.selectByPrimaryKey(roId);
	}
	
	/**
	 * 根据ID查询模块
	 * @param roId
	 * @return	ZTree list集合
	 */
	@RequestMapping("findByIds")
	@ResponseBody
	public List<ZTree> findByIds(String roId){
		//调用findById查询方法
		return roleService.findById(roId);
	}
	/**
	 * 根据角色ID删除
	 * @param roId	角色ID
	 * @return	行数
	 */
	@RequestMapping("delete")
	@ResponseBody
	public int delete(String roId){
		//调用selectByPrimaryKey方法
		SnRole role = roleService.selectByPrimaryKey(roId);
		//给是否有效属性赋值0
		role.setIsva(0);
		//调用修改的方法
		return roleService.updateByPrimaryKeySelective(role);
	}
	
	/**
	 * 登录
	 * @param user	user对象
	 * @param session	Session
	 * @return	user对象
	 */
	@RequestMapping("login")
	@ResponseBody
	public Message login(SnUser user,HttpSession session){
		//调用login方法
		SnUser users = roleService.login(user);
		//创建一个Message对象
		Message msg = new Message();
		//判断user对象不能为空
		if(users != null ){
			//给state属性赋值1
			msg.setState(1);
			//将user放入Session中
			session.setAttribute("user", users);
		}else{
			//给state属性赋值1
			msg.setState(0);
		}
		return msg;
	}
	
	/**
	 * 后台首页获取Session
	 * @param session	session
	 * @return	Message对象
	 */
	@RequestMapping("getSession")
	@ResponseBody
	public Message getSession(HttpSession session){
		//取session
		SnUser user = (SnUser) session.getAttribute("user");
		//创建一个Message对象
		Message msg = new Message();
		//判断user不能为空
		if(user != null ){
			//给State赋值
			msg.setState(1);
		}else{
			//给State赋值
			msg.setState(0);
		}
		//返回msg
		return msg;
	}
	
	/**
	 * 首页获取用户名
	 * @param session
	 * @return	用户对象
	 */
	@RequestMapping("getUserName")
	@ResponseBody
	public SnUser getUserName(HttpSession session){
		//取session
		SnUser user = (SnUser) session.getAttribute("user");
		//返回user
		return user;
	}
	
	/**
	 * 首页退出session
	 * @param session
	 * @return	行数
	 */
	@RequestMapping("exitUser")
	@ResponseBody
	public int exitUser(HttpSession session){
		//移除session为user的
		session.removeAttribute("user");
		//返回1
		return 1;
	}
	
	/**
	 * 个人资料修改
	 * @param file		file图片
	 * @param request	请求对象
	 * @param user		user对象
	 * @return	String路径
	 * @throws IllegalStateException
	 * @throws IOException
	 */
	@RequestMapping("addorUpdate")
	public String addorUpdate(@RequestParam(value = "file", required = false)MultipartFile file,HttpServletRequest request,SnUser user,HttpSession session) throws IllegalStateException, IOException{
		//取session
		SnUser users = (SnUser) session.getAttribute("user");
		//调用Tools工具类的getRealPath方法
		String path=Tools.getRealPath(request, file);
		//给图片赋值
		user.setUserImage(path);
		//给操作时间赋值
		user.setOptime(Tools.getCurDateTime());
		//给操作人赋值
		user.setOper(users.getUserName());
		//给用户状态赋值
		user.setUserState(Integer.valueOf(1));
		//调用增加或者修改的方法
		snUserService.updateByPrimaryKeySelective(user);
		//重新设置session
		session.setAttribute("user", user);
		//返回 重定向redirect:../page/index/index.html
		return "redirect:../page/index/index.html";
	}
	
	/**
	 * 根据用户ID查询财务总金额
	 * @param barId 分公司ID
	 * @return	财务对象
	 */
	@RequestMapping("findByMoney")
	@ResponseBody
	public SnFinance findByMoney(String barId){
		//调用findByMoney方法
		return roleService.findByMoney(barId);
	}
	
	/**
	 * 查询会员总数量
	 * @return	数量
	 */
	@RequestMapping("findMemberCount")
	@ResponseBody
	public int findMemberCount(){
		//调用findMemberCount方法
		return roleService.findMemberCount();
	}
	/**
	 * 查询分公司总数量
	 * @return	数量
	 */
	@RequestMapping("findBraCount")
	@ResponseBody
	public int findBraCount(){
		//调用findBraCount方法
		return roleService.findBraCount();
	}
	/**
	 * 查询商品总数量
	 * @return
	 */
	@RequestMapping("findComCount")
	@ResponseBody
	public int findComCount(){
		//调用findComCount方法
		return roleService.findComCount();
	}
	
	/**
	 * 查询旧密码是否一致
	 * @param oldPwd	旧密码
	 * @param session	session
	 * @return	行数
	 */
	@RequestMapping("findOldPwd")
	@ResponseBody
	public int findOldPwd(String oldPwd,HttpSession session){
		//取Session
		SnUser user = (SnUser) session.getAttribute("user");
		//调用findOldPwd方法
		return roleService.findOldPwd(user.getUserId(), oldPwd);
	}
	
	/**
	 * 修改密码
	 * @param newPwd	旧密码
	 * @param session	session
	 * @return	行数
	 */
	@RequestMapping("updatePwd")
	@ResponseBody
	public int updatePwd(String newPwd,HttpSession session){
		//取Session
		SnUser user = (SnUser) session.getAttribute("user");
		//调用updatePwd方法
		return roleService.updatePwd(user.getUserId(), newPwd);
	}
}
